/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package simulateurs.model.monde;

// contient les attributs herités de Cercle :

import java.awt.Color;
import java.util.ArrayList;
import java.util.Random;

// double point.abscisse
// double point.ordonnee


/**
 *
 * @author Jah
 */
public class Balle extends Cercle {
    private int valeur;
    private boolean ramassable=true;
    private String bonus=null;
    private boolean IsBonus;
    int compteur;
    
    
    // pour parser java
    public Balle(){
        super();
    }
   public Balle(Point centre, int valeur, Color couleur, String bonus){
		super(centre,couleur);
		this.valeur=valeur;
                this.bonus=bonus;
                
	}
	
	public Balle(Point centre, double diametre, int valeur, Color couleur, String bonus){
		super(centre, couleur, diametre);
		this.valeur=valeur;
                this.bonus=bonus;
	}

        public Balle(Point centre, int valeur, Color couleur, boolean bonus){
                super(centre,couleur);
		this.valeur=valeur;
                this.IsBonus=bonus;
                }
        
           public Balle(Point centre, double diametre, int valeur, Color couleur, boolean bonus){
                super(centre,couleur,diametre);
		this.valeur=valeur;
                this.IsBonus=bonus;
                }
           
            public Balle(double diametre, int valeur, Color couleur, boolean bonus){
                super(couleur,diametre);
		this.valeur=valeur;
                this.IsBonus=bonus;
            }
                
        
        
	public int getValeur() {
		return valeur;
	}

	public boolean isRamassable() {
		return ramassable;
	}

	public void setValeur(int valeur) {
		this.valeur = valeur;
	}

	public void setRamassable(boolean ramassable) {
		this.ramassable = ramassable;
	}

    public boolean isIsBonus() {
        return IsBonus;
    }
        
        
        
        public void setBonus( String bonus) {
		this.bonus=bonus;
	}
        
        public String getBonus() {
		return bonus;
	}
    
    
    public static Balle rechercherBalleViaPoint(ArrayList<Balle> balleList, Point point) {
        Balle balle = null;
        for(int i = 0; i < balleList.size();i++){
            if(point.pointsMemeEndroit(balleList.get(i).getCentre())){
                balle = balleList.get(i);
            }
        }
        return balle;
    }
    
    public static void genererPositionBalles(ArrayList<Balle> balleList,ArrayList<Equipe> equipeList ,ArrayList<But> butList,double largeurArene, double hauteurArene ){
        
        // if faut un random dans la position.
        // gestion des colisions ???? !
        int largeurMin;
        int largeurMax;
        int hauteurMin;
        int hauteurMax;
      
        double abscisse;
        double ordonnee;
        Point collision = null;
        ArrayList<Balle> balleListTmp = new ArrayList<Balle>(); // il faut vraiement fait l'allocation ici
        
        Point nvPoint = null;
        Cercle nvCercle = null;
        Random r = new Random();
	

	
        for (int i=0;i<balleList.size();i++){
            //balleList.get(i).setCentre(new Point);
            do{
                
                largeurMin = (int)balleList.get(i).getRayon();
                largeurMax = (int)(largeurArene-balleList.get(i).getRayon());
                hauteurMin = (int)balleList.get(i).getRayon();
                hauteurMax = (int)(hauteurArene-balleList.get(i).getRayon());
                
                abscisse = largeurMin + r.nextInt(largeurMax - largeurMin); // cast implicite
                ordonnee = hauteurMin + r.nextInt(hauteurMax - hauteurMin); // cast implicite
                nvPoint = new Point(abscisse,ordonnee);
                nvCercle = new Cercle(nvPoint,balleList.get(i).getRayon()*2);
                
                //collision = null;
                
                // ajout test sur collision
                // boucle de collision avec les ancienne balle
                
                // avec la liste des balles deja placées !!!!
                // pareil pour la liste equipes! A CHANGER !!!!!! !!! !! !!! !! !!! !! !! !! !! !! 
                // ici la liste d'equipes est vide
                collision = detecterCollision(new ArrayList<Equipe>(),balleListTmp, butList ,nvCercle, nvCercle); // attention a balleList.get(i), c'est une balle et on attends un cercle
             if(collision != null){
                System.out.println("Collision baballe");
            }
            else{
                 System.out.println("PAS de collision baballe");
            }
            }while(collision != null);
            System.out.println("Le nouveau point est "+nvPoint.getAbscisse() +","+nvPoint.getOrdonnee()+")");
            balleList.get(i).setCentre(nvPoint);
            balleListTmp.add(balleList.get(i));
            
            System.out.println("La taille de balleListTmp est" + balleListTmp.size());
            
            // ajoute la balle dans une liste de balle ajoutée
            
            
            System.out.println("La balle " + i + " au point : ("+balleList.get(i).getCentre().getAbscisse() +","+balleList.get(i).getCentre().getOrdonnee()+")");
        }
        System.out.println("Affichage de la liste des balles :");
        for (int f=0;f<balleListTmp.size();f++){
                       System.out.println("balle " + f + " au point : ("+balleListTmp.get(f).getCentre().getAbscisse() +","+balleListTmp.get(f).getCentre().getOrdonnee()+")");
 
        }
    }
    
    // c'est la condition d'arret
    
    public static boolean ballesRestantes(ArrayList<Balle> balleList,ArrayList<Equipe> equipeList){
    
        int valeurBalles = 0;
        int valeurBallesRamassees = 0;
         
        for (int i = 0;i<balleList.size();i++){
            if(!balleList.get(i).isIsBonus())
               {
              valeurBalles += balleList.get(i).getValeur();
            }
        }
        
        for(int i=0; i<equipeList.size(); i++){
                valeurBallesRamassees+=equipeList.get(i).getScore();
            }
        
        if(valeurBalles==valeurBallesRamassees){
            return false;
        }
        
        else{
            return true;
        }
            


}


    public String bonus(){
        Random r = new Random();            //choix aléatoire du bonus
        compteur = r.nextInt(5);
        String bonus = null;
        switch (compteur) {
            case 0: bonus="faster";
                    break;
            case 1: bonus="slower";
                    break;
            case 2: bonus="win";
                    break;
            case 3: bonus="wtf";
                    break;
            case 4: bonus="death";
                    break;
        
        
        }
        return bonus;

    }


    
    

}
